IBM Certified Solution Developer - IBM WebSphere Portal V6.1

Architecting a Portal Solution

1. Demonstrate familiarity WebSphere Portal Web 2.0 features
2. Demonstrate knowledge of WebSphere Portal Platform features
3. Identify portal dependencies on existing software
4. Identify supported portlet frameworks
5. Identifying scope for custom portlets
6.
Know the authentication levels provided by WebSphere Portal
7. Understand how portal features and portlets use user identity to personalize
8. Understand patterns and methods for application integration with WebSphere Portal
9. Understand portal page aggregation modes
10. Use out-of-the-box portlets

Install, Setup and Configuration of a Developer Environment

1. Compile, packaging, and deploying portal artifacts using Rational Application Developer
2. Configuring Rational Application Developer for remote testing and debugging with WebSphere Portal
3. Create portlets in Rational Application Developer and WebSphere Portlet Factory
4. Creating Portal projects in Rational Application Developer
5. Diagnose problems with development environment installation
6. Identify Software Requirements
7. Optimize development environment
8. Understand software prerequisites (including compatibility questions)

Portlet Development

1. Create cooperative portlets using Click-2-Action and Property Broker
2. Demonstrate knowledge of core Java Portlet Objects
3. Demonstrate the differences between, events, render parameters, public render parameter, and scoped attributes; request, session, shared session, and application scope.
4.
Describe the portlet life cycle for JSR-168 and JSR-286
5. Effectively use JSP and JSTL to render portlet markup
6. Have knowledge of WSRP for JSR-168 and JSR-286 portlets
7. Identify supported portlet modes and custom portlet modes
8. Implement portlet actions and events with Java 5 annotations
9. Understand portlet descriptor files for each portlet type and utilize WebSphere Portal extend features
10. Understand WebSphere Portal client side portlet API
11. Use AJAX to update state and trigger actions with JSR-286 portlets
12.
Use Remember Me API to provide anonymous portlet content personalization
13. Utilize client profile information (JSR-188)
14. Utilize of standard portlet cascading style-sheet classes

Theme Development

1. Demonstrate understanding of Theme Extensions
2. Develop custom themes, skins and screens
3. Identify Portal and Drag-and-Drop JSP tags
4. Implement Client Side Aggregation
5. Implementing Portal Navigation
6. Portal Cascading Style-sheet classes
7. Using Theme Customizer Portlet to modify a theme
8. Using theme policies and custom page settings

Portal Frameworks and Portlet Services

1. Creating a custom Portlet Service
2. Develop Login, Logout, and Session validation filters
3. Parsing ATOM Feeds
4. Understand key Service Providers (SPI) and Application Programing Interfaces (API)
1. Login Service SPI
2. Portal User Management SPI
3. Portal Write Model SPI
4. Property Broker SPI
5. Resource Addressability Framework (SPI)
6. Step Up Authentication SPI

5. Use REST protocol to access SPI's

Testing, Debugging and Performance Monitoring of Portlets

1. Debug a portlet on a local server
2. Debug a portlet using WebSphere Portal remote
3. Effective use of logging
4. Running code profiling in Rational Application Developer
5. Troubleshoot portlet applications
6. Using portlet PMI statics

Additional Development Concepts

1. Assembling Composite Application Templates
2. Collaboration API
3. Creating custom portal search interfaces
4. Developing Personalization Resources
5. Have knowledge of Portlet Bridge Frameworks; Struts, JavaServer Faces, etc.
6. Search the Business Solutions catalog
7. Using and extending the Credential Vault
8. Using Web Content Management API's
9. Writing Personalization and Visibility Rules




main


Click here to View more...

Roles and Role types in WPS


In WPS you can asssign a particular role to user for particular resource. What that means is your saying that user can perform set of operations on protected resource. There are two ways in which you can assign permissions to user, first is either you assign it to user directly(implict) or you assign those permissions to a group and user is part of that group(explicit). The set of permissions granted to specific user is defined by the union of all permissions contained in all explicitly and implicitly assigned roles of this user.

The WPS server defines following role types

  • User: Viewing portal content.

  • Privileged User: Viewing portal content, personalizing portlets and pages and creating new private pages

  • Contributor: Viewing portal content and creating new resources. The contributor role type does not include the permissions to edit resources. It only allows you to create new resource

  • Editor: Creating new shared resources and configuring existing resources that are used by multiple users.

  • Manager: Creating new shared resources as well as configuring and deleting existing resources that are used by multiple users

  • Security Administrator: Creating and deleting role assignments on resources. Being assigned Security Administrator role at some resource means that the user shall be allowed to act as a delegated administrator for that resource, in other words the Security Administrator on a resource is allowed to delegate a subset of their privileges on the resource to other people according to the Delegated Administration Policy. For example, a user who is assigned Security Administrator and Editor role on a resource can assign this Editor role to other people provided he has Delegator role on those people. Having the Security Administrator role on a resource alone does not give view or edit access to the resource.

  • Administrator: Unrestricted access on resources. This includes creating, configuring, and deleting resources. Administrators can also change the access control settings on resource; in other words grant other people access to those resources.

  • Delegator: Assigning the Delegator role to principals (users and groups) allows roles to be granted to them. Having the Delegator role on other resources, such as specific portlets, is not useful. The set of roles that can be granted to those principals is defined through the Security Administrator and Administrator role types. For example a user has a Delegator role on the SalesTeam user group but no Delegator role on the Managers user group, so this user can grant roles only to the SalesTeam or individual members of the SalesTeam user group but not to the Managers user group. Having the Delegator role on a resource does not give direct access to the resource. The purpose of the Delegator role type is to allow the granting of roles to users or groups, so assigning Delegator role on resources or resource types that are not users or user groups will not grant those users additional privileges.


The roles are arranged in hierarchy




Photobucket

Each role type extends the privileges contained in the role types directly beneth it in the hierarchy. Ex. Contributor can do everything that User can do and Editor can everything that both Contributor and User can do.




Click here to View more...

List for WAS Core Admin test

Resource for preparing for my WAS 6.1 core admin test

IBM WebSphere Deployment and Advanced Configuration, is a very good book, which helps cover most of the topics.

In addition to that i used following red book






Click here to View more...

Inter portlet communication between portlets across pages

In order to provide coordination between portlets the Java Portlet Specification, JSR 286 introduces Eventing and Public Render Parameters

Eventing:

By default portlets can send and receive events with other portlets that are on the same page. This can be changed to enable portlets to send and receive events from other portlets that are on different pages. This can be done by adding the following property in portal-ext.properties in Web Space server and Liferay Portal 5.2.x.

portlet.event.distribution=ALL_PORTLETS



Public Render Parameters:

By default portlets can share render states with other portlets that are on the same page. This can be changed to enable portlets to share render states with other portlets that are on different pages. This can be done by adding the following property in portal-ext.properties in Web Space server and Liferay Portal 5.2.x.

portlet.public.render.parameter.distribution=ALL_PORTLETS


Click here to View more...

Preventing infinite loops in Eventing of JSR 286

The following property is used to specify the maximum number of events that can be generated from portlets to prevent infinite loops. If a portlet sends an event to other portlets, it is considered as one event generation. If the other portlets send events, that is considered as two event generations and so on. The default value is 3.





portlet.event.max.generation=3


Click here to View more...

Caching with JSR 286

The public review draft of JSR 286 was recently released and the related files can be downloaded from this link. One of the major changes introduced in the new Portlet specification is how the caching of markup and resources can be done by the Portlet Container. I just want to highlight the differences between the caching part of JSR 168 and JSR 286 here.

JSR 168:

* Only markup caching is supported. Resources are not accessed through a separate life cycle method.
* Only "Expiration" cache is supported.
* The cache is per user client and not shared across users.
* The cached content is expired after a pre-defined (in portlet.xml) period, or as set in the portlet (programatically).
* The expired cache is deleted and a fresh markup is fetched by calling the render method




JSR 286:

* Resources can be cached. A new life cycle method serveResource() has been introduced which allows access to the PortletContext object apart from providing more control for the portlet developers.
* "Validation" caching is supported along with "Expiration" caching. After the cache has expired the portlet has the option to check if the cache is still valid and indicate that the cache can be reused. To enable this, ETag has been introduced, which is similar to how the browsers, which conform to HTTP 1.1, perform caching. Once the cache has expired the Portlet Container calls the render/serveResource method with the ETag set in the RenderRequest/ResourceRequest, which the portlet can access and check if the cache is still valid. If the cache is still valid, then the portlet can set the USE_CACHED_CONTENT property in the response, and the new expiration time.
* Cache scope has been introduced, which when set to "public" indicates that the cache can be shared across users. The default value is "private" which behaves like the JSR 168 caching where the cache is per user.

The introduction of ETag ensures that the browser can be leveraged to cache resources and markup. With the new features of public sharing of caches, resource caching, validation caching and leveraging browser caching, the performance of aggregation of portlets by a portal can be seen to increase significantly.

Click here to View more...

Resource Serving in JSR 286

Recently the JSR 286 draft was available for public review which can be downloaded from this link. It includes some of the major features which were missed in the JSR 168 spec. You can visit Deepak's blog to get a list of all those major changes. One of the major feature introduced in this new Portlet specification is "Resource Serving" . In this blog I will explain this feature in detail.

In one line "The resource serving feature provides the ability for a portlet to serve a resource".
Why it is needed ?

Direct links to the resources in the same portlet web application are not guaranteed to pass through the portal server and will not have portlet context available. So direct link should be used for the use case where access to the portlet context and access through portal server is not needed.

But the resource url link points back to the portlet. A new interface "ResourceServingPortlet" is introduced in the JSR 286 spec. Via these resource url links serveResource method of ResourceServingPortlet interface is called and portlet can serve the resource which may be protected by the portal security and can leverage portlet context. Portlet container does not render any output in addition to the content returned by the serveResource call. Thus this new life cycle method serveResource() provides more
control to the portlet developer by giving access to write directly on the response object where portal server just acts as a proxy.

The serveResource call can also be used to implement AJAX use cases by invoking resourceURL through XMLHttpRequest in client side javascript. The client side code of the portlet is then responsible for inserting either the markup or otherwise update the page DOM in a non disruptive manner for the other components on the page.



How to Create a Resource URL ?

A resource url can be generated by invoking createResourceURL() method of the RenderResponse object in render phase of the portlet or doView() method of the Generic Portlet.

The resouce url can also be created inside serveResource() method of the ResourceServingPortlet. In that case portlet developers need to call createResourceURL() method on ResouceResponse object passed to the serveResource() method.

In the following code snippet we will create a resource url inside the doView() and then we will set that url as a IMG source in the rendered output.


public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {

response.setContentType("text/html");
PrintWriter writer = response.getWriter();

ResourceURL resURL = response.createResourceURL();
resURL.setResourceID("image");
writer.println("");

//Render other markups

}


So when the browser loads the portal page to show the view mode of the portlet, it automatically sends the request for the resURL which goes through portal and finally serveResouce() of GenericPortlet is called to serve the resource (in this case "image").

The serveResource() for this example should look like below

public void serveResource(ResourceRequest resRequest, ResourceResponse resResp) throws PortletException, IOException {

resResp.setContentType("image/png");
byte[] b = getImage("MyImage.PNG"); //Returns image bytes
resResp.getPortletOutputStream().write(b);

}

I have taken the above image example to explain the usefulness of this new feature properly. But you may also want to create a link for a resource url in your doView() and then on clicking on that link, serverResource() will be called which will only show the output returned from the serveResource().

You can also set a resource id of the resourceURL to enable same serveResource() serving multiple resources. You can also create new resource urls inside serveResource().

The cache level of a resource url can be set through setCacheability() of ResourceURL class though there are certain restrictions in setting cache level. Possible values are: FULL, PORTLET
or PAGE.
Click here to View more...

Difference between ActionURL v/s RenderURL in JSR286 Portal

The difference is,
I would say:

ActionURL - forwards your request to processAction()
RenderURL - forwards your request to doView()

The most important difference is how the portal must handle both requests.
As the portlet specification says:

If the client request is triggered by an action URL, the portal/portlet-container must first trigger the action request by invoking the processAction method of the targeted portlet.

The portal/portlet-container must wait until the action request finishes.Then, the portal/portlet-container must trigger the render request by invoking the render method for all the portlets in the portal page with the possible exception of portlets for which their content is being cached.

The render requests may be executed sequentially or in parallel without any guaranteed order. Click here to View more...

JSR-286 Java Portlet API 2.0

Hi Friends

The following link might be very useful for most of us.
I was constantly in search of an diagrammatic representation of Potal 2.0 API and my search ended with this :)

JSR-286 Java Portlet API 2.0


Click here to View more...

Menu Component in WCM

Menu component fields
This section is used to set menu search parameters, set menu display settings and design the format of the menu.

Matching Content associated Site Areas Any content linked to the site areas you select will appear in the menu.
Include current Site Area If selected, any content linked to current site area will appear in the menu.
Include all Ancestors Any content linked to parent site areas (or parents of parents etcetera) of the site areas selected above will also be included in the search.
Include all Descendants Any content linked to child site areas (or children of children etcetera) of the site areas selected above will also be included in the search.
Matching Authoring Templates Any content based on the templates you select will appear in the menu.
Matching Content associated Categories Any content profiled with the categories you select will appear in the menu.
Note: Search Parameters
You can choose a combination of authoring templates, categories and site areas when profiling a menu.

Web Content Management menu searches are "or" searches, not "and" searches. This means that a menu that searches for two different categories and an authoring template will return content profiled with at least one of each profile type (one category and one template), not just content that matches all of the parameters. Content that matches only one profile type (template only) will not be returned.

Note: Taxonomies
Taxonomies cannot be used in Web Content Management menu searches. If you would like to have a menu return results based on content profiled with any category in a taxonomy, you should create a top-level category.

Matching Content Keywords Any content profiled with the keywords you enter will appear in the menu.
Matching Profile Search Rules Any content that matches the Search rule you select will appear in the menu. See the Search rules chapter for further information.
Results must match All Categories If selected, any results returned by a menu using categories as a search criteria must match all selected categories.
Include current document in results (if applicable) If this is selected, the currently displayed content will be listed in a menu if it matches the search criteria.
Ascending order for results Choose this option if you wish your menu items to be sorted in ascending order.
Results Primary Sort Key
Results Secondary Sort Key

Results Tertiary Sort Key
These fields determine what will be sorted using a combination of the following:
Name
Name of content
Description
Description of content.
Published Date
The date the content was first published. (Same date that is set in the workflow section of content items.)
Last Modified Date
Date the content was last modified.
Results per Page Defines how many links will appear in the menu.
Start Page If you have a menu with 5 elements per page, you can choose to start the menu at page two. This means that the second "page" of your menu (elements 6-10) will comprise the menu.
Debug Mode (Java console only) Sends Web Content Management information to the Web Content Management logs.
Header Design
Component Design for each matching Content

Footer Design

Separator
These Sections are used to enter text, tags and code to design the format of the rendered component.
The code entered in the header and footer designs will appear before and after the displayed menu results.

The code entered into the "Component Design for each matching Content" is used to format each menu result.

The code entered into the "Separator" will appear between each displayed menu result.




Here is the solution that works for me.

1. Get the system workspace using WorkspaceManager class
javax.jcr.Workspace jcrWsp = WorkspaceManager.getSystemWorkspace();

2. Login using the system credentials

3. Get the Localised Library

4. Get the Menu component with the obtained JCR Workspace, Localized library and menu name “menuName” using CoreQueries class
Controllable cble = CoreQueries.getByName(jcrWsp,locLib,mcompCont.getClass(), menuName);

5. Type cast the controllable obtained to the type menu component
mcompCont = (MenuCmpnt)cble;

6. Get the Array of Cmpnt containing “Menu Design Properties” section
Cmpnt[] compObjArr= mcompCont.getMicroTemplates();

7. Get the component of type ArrayCmpnt located at index “0” to retrieve the field “Design for each menu search result”
Cmpnt micComp1 = compObjArr[0];
ArrayCmpnt micArrayComp = (ArrayCmpnt)micComp1;

8. Iterate over ArrayCmpnt to retrieve each Object

9. Check for the pattern where last Object is of type you require to edit ex TextCmpnt.

10. You can modify the list condent by using remove, add operation. The object would be of type Cmpnt

11. Get reference to Menu Component Identity mcompIdnty

IdentityControl idntyCtrl =null;
for(Iterator ctrlIter=mcompCont.controlIterator();ctrlIter.hasNext();){
Control ctrl =(Control)ctrlIter.next();
if(ctrl.getClass().getName().equals("com.aptrix.identity.IdentityControl")){
idntyCtrl=(IdentityControl)ctrl;
}
}
Identity mcompIdnty =(Identity)idntyCtrl;


12. Update the Repository using RepositoryService.update(jcrWsp,mcompIdnty,cble)

13. Save workspace using SaveWorkSpace.execute()

14. Unload the workspace using WorkSpaceManager


Click here to View more...

WCM Tuning

Try this out for WCM Tuning:

http://www-1.ibm.com/support/docview.ws … &aid=1


Advanced Caching is best if u r using Web Content viewer portlet to render WCM Pages,else go for pre-rendering.




This document contains a checklist for tuning a WCM system for optimum performance.
http://www-10.lotus.com/ldd/portalwiki. … -checklist


Click here to View more...

Problems in Syndication on Portal 6.0

Syndicators and subscribers should always be at the same build and patch level!




Here's a bit of feedback about syndication issues in Portal 6.0 - what problems (and any solutions) are people experiencing? To date I've encountered the following issues:

1. Syndication on 6.0.0.0 results in all content being "locked" on the subscriber by wpsadmin, and unable to be unlocked - permanently read-only
2. Syndication on 6.0.0.1 is unable to copy 90% of content or other items where there are permissions granted to [all users]
3. Syndication on 6.0.0.1 results in locked items in subscriber library that need to be unlocked by wpsadmin

All of these issues have occurred when syndicating from Windows to AIX installations.


Few issues I have came across, these are all problems in 6001 (fixes are available for these):

Problem:
Syndications always copies all the versions right now from Syndicator to Subscriber, this can cause large intial data copy even if versions are not required on Subscriber machine.


Problem:
Syndication is trying to send an older version of an item, but there's already a newer version of the item in its place on the Subscriber. The item existed at some point on the Syndicator, but it was deleted and another item with the same name was created in the same library. The problem occurs when WCM syndicates the old version of the item (the one that is deleted), and WCM attempts to add the item to the repository. Since an item already exists with this name, a DuplicatePathException is thrown. Any subsequent updates that reference the item also fail, and an ItemNotFoundException is thrown. Below is an example of the stack trace for an ItemNotFoundException.

[1/5/07 18:50:35:170 EST] 00000054 RepositoryUpd E Could not find existing item with ID: a69fa88042b25d169e2edead51746063
javax.jcr.ItemNotFoundException: A node does not exist with UUID: a69fa88042b25d169e2edead51746063
at com.ibm.icm.jcr.WorkspaceImpl.getNodeByUuid(WorkspaceImpl.java(Compiled Code))
at com.ibm.workplace.wcm.services.repository.RepositoryServiceImpl.getNodeByUUID(RepositoryServiceImpl.java(Compiled Code))
at com.ibm.workplace.wcm.services.transaction.steps.repository.RepositoryUpdate.getNode(RepositoryUpdate.java:181)
at com.ibm.workplace.wcm.services.transaction.steps.repository.RepositoryUpdate.preExecute(RepositoryUpdate.java:149)
at com.ibm.workplace.wcm.services.transaction.TxUnitOfWork.run(TxUnitOfWork.java:68)
at com.ibm.workplace.wcm.services.content.ContentServiceImpl.save(ContentServiceImpl.java:5698)
at com.ibm.workplace.wcm.services.content.ContentServiceImpl.update(ContentServiceImpl.java:6189)
at com.ibm.workplace.wcm.services.content.ContentServiceImpl.update(ContentServiceImpl.java:6279)
at com.aptrix.deployment.subscriber.PackageProcessor.repositoryUpdate(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.updateItemsInRepository(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.finishPackage(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.processUpdate(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.process(PackageProcessor.java:368)
at com.aptrix.deployment.subscriber.PlutoSubscriberInterface.processPackage(PlutoSubscriberInterface.java:238)
at com.aptrix.syndication.business.subscriber.SubscriberTaskManager.processUpdate(SubscriberTaskManager.java:148)
at com.aptrix.syndication.business.subscriber.SubscriberTaskManager$UpdateTask.doManagedWork(SubscriberTaskManager.java:109)


Problem:
After purging an item on the subscriber and a full update is kicked off from the syndicator, the subscriber throws an exception when attempting to recreate the item because the version entry for the item still exists in the event log's version table (JCR.EV_VERSION).

[1/11/07 1:02:52:139 EST] 0000005a PackageProces W IWKPD1029X: Could not store doc: LONDON Leasing, IdRef: {4b578980435d4685be69ff82fa89bead, com.aptrix.pluto.site.SiteArea}
java.lang.RuntimeException: com.ibm.workplace.wcm.services.eventlog.EventLogException: IWKMU1062X: Message: Cannot add version entry for item [Ljava.lang.Object;@adfe8b6., Cause: com.ibm.websphere.ce.cm.DuplicateKeyException: [IBM][CLI Driver][DB2/AIX64] SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "1" constrains table "JCR.EV_VERSION" from having duplicate rows for those columns. SQLSTATE=23505

at com.ibm.workplace.wcm.services.content.ContentServiceImpl.addToParent(ContentServiceImpl.java:4935)
at com.ibm.workplace.wcm.services.content.ContentServiceImpl.addToParent(ContentServiceImpl.java:4885)
at com.aptrix.deployment.subscriber.PackageProcessor.repositorySaveNew(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.saveNewItem(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.saveItemAndParents(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.addItemsToRepository(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.finishPackage(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.processUpdate(PackageProcessor.java(Compiled Code))
at com.aptrix.deployment.subscriber.PackageProcessor.process(PackageProcessor.java:365)
at com.aptrix.deployment.subscriber.PlutoSubscriberInterface.processPackage(PlutoSubscriberInterface.java:238)
at com.aptrix.syndication.business.subscriber.SubscriberTaskManager.processUpdate(SubscriberTaskManager.java:148)
at com.aptrix.syndication.business.subscriber.SubscriberTaskManager$UpdateTask.doManagedWork(SubscriberTaskManager.java:109)
at com.aptrix.syndication.business.TaskManager$ManagedTask.run(TaskManager.java:832)
at com.ibm.wps.services.workmanager.impl.WasWorkWrapper.run(Unknown Source)
at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:258)
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at javax.security.auth.Subject.doAs(Subject.java:477)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:118)
at com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:325)
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:709)
at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:218)
at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:154)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))


Click here to View more...

Taxonomy component in WCM

I am trying to display a list of categories under a taxonomy using a taxonomy component. I have
selected my taxonomy in the Start Category field of the taxonomy component, I have not included
it in the start and I have set the depth to All. I am trying to get the names of the categories to
display in the dropdown menu generated by the component, but am not sure what tags I need
to use in order to properly display the names of the categories. When I use empty
tags I get blank options in the dropdown list. What do I put in the unselected design area of the
component?



You should be able to use a Placeholder tag to get the Name, Title or Depth
<Placeholder tag="name"/>
<Placeholder tag="title"/>
<Placeholder tag="depth"/>

Click here to View more...

Java documentation for the WCM API

Selected java documentation for the WCM API can be found at:

http://www.ibmportal.com/javadoc/

This is not an exhaustive collection of the available Javadoc, and you should always reference the Javadoc for the environment you are working in, particularly if the platform version differs to the available samples.

The API documentation is for the exclusive use of licence holders of IBM® WebSphere® Portal and Workplace Web Content Management™ products.




Click here to View more...